﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Max.PH5_2004A.Shopping.IService
{
    public interface ICRUDService<TEntity,TInputDto,TOutputDto> where TEntity : class,new()
    {
        #region 添加

        int Insert(TInputDto t); //添加
        int Insert(List<TInputDto> ts); //批量添加

        #endregion


        #region 删除
        int Delet(string id); //根据id单删除
        int Delete(List<string> id); //批删除

        int Delete(TInputDto t); //根据model删除

        int Delete(List<TInputDto> ts); //根据model删除
        #endregion

        #region 修改

        int Update(TInputDto t);
        int Update(List<TInputDto> ts); //批量修改

        #endregion

        #region 查询

        IQueryable<TOutputDto> Select();//查询所有记录
        TOutputDto SelectById(string id);//查询一条记录        

        /*
         * 根据条件查询（不知道有几个条件，所以可以进行条件拼接）
         * System.Linq.Expressions.Expression 是linq表达式
         * Func<TInputDto,bool>是委托
         * **/
        IQueryable<TOutputDto> Select(System.Linq.Expressions.Expression<Func<TEntity, bool>> where);

        //根据条件查询，并可以排序
        IQueryable<TOutputDto> Select<TKey>(Expression<Func<TEntity, bool>> where,
            Expression<Func<TEntity, TKey>> sort, bool isAsc);

        //根据条件查询，可以排序，还可以分页
        IQueryable<TOutputDto> Select<TKey>(Expression<Func<TEntity, bool>> where,
            Expression<Func<TEntity, TKey>> sort, bool isAsc, int pageIndex, int pageSize, out int total);

        #endregion
    }
}
